{# Renders either as plain text or everything else depending on the type #}
{%- macro render_element(entry) -%}
{%- if entry is string -%}
  {{ render_text({'text': entry}) }}
{%- elif is_list(entry) -%}
  {%- for e in entry -%}{{ render_element(e) }}{%- endfor -%}
{%- elif entry['type'] == 'text' -%}
  {{ render_text(entry) }}
{%- elif entry['type'] == 'icon' -%}
  {{ render_icon(entry) }}
{%- elif entry['type'] == 'url' -%}
  {{ render_url(entry) }}
{%- elif entry['type'] == 'enumeration' -%}
  {{ render_enumeration(entry) }}
{%- elif entry['type'] == 'tags' -%}
  {{ render_tags(entry) }}
{%- elif entry['type'] == 'enclose' -%}
  {{ render_enclose(entry) }}
{%- elif entry['type'] == 'image' -%}
  {{ render_image(entry) }}
{%- else -%}
  {{ raise('Unknown entry type: {}.'.format(entry)) }}
{%- endif -%}
{%- endmacro -%}

{# A single piece of text optionally with a format class. (see https://bulma.io/documentation/helpers/typography-helpers/) #}
{%- macro render_text(text) -%}
{%- if 'class' in text -%} {# Enhanced text #}
  <span class="{{ text['class'] }}">{{ text['text'] }}</span>
{%- else -%}
  {{ text['text'] }}{# <span>{{ text['text'] }}</span> #}
{%- endif -%}
{%- endmacro -%}

{# Renders an icon #}
{%- macro render_icon(icon) -%}
<span class="icon {{ icon['css'] }}"{% if 'title' in icon %} title="{{ icon['title'] }}"{% endif %}><i class="icon-{{ icon['id'] }}"></i></span>
{%- endmacro -%}

{# Renders an image #}
{%- macro render_image(image) -%}
<img src="{{ base['url_to'](image['file']) }}" width="{{ image['width'] }}" height="{{ image['height'] }}" alt="">
{%- endmacro -%}

{# Some text surrounded by a link tag #}
{%- macro render_url(url) -%}
<a href="{{ base['url_to'](url['href'], url) }}"{% if 'title' in url %} title="{{ url['title'] }}"{% endif %}{% if 'class' in url %} class="{{ url['class'] }}"{% endif %}>{{ render_element(url['content']) }}</a>
{%- endmacro -%}

{# Renders a list of enumeration entries (either links or text) #}
{%- macro render_enumeration(enumeration) -%}
{%- set divider = joiner(enumeration['divider']) -%}
{%- for entry in enumeration['entries'] -%}{{ divider() }}{{ render_element(entry) }}{%- endfor -%}
{%- endmacro -%}

{# #}
{%- macro render_tags(tags) -%}
  <div class="tags has-addons are-medium">{{ render_enumeration(tags['enumeration']) }}</div>
{%- endmacro -%}

{# #}
{%- macro render_enclose(enclose) -%}
{{ enclose['left'] }}{{ render_element(enclose['entry']) }}{{ enclose['right'] }}
{%- endmacro -%}
